/**
 * setjmp.c
 * test setjmp and longjmp functions.
 * @author: zt 2013-09-06
 */
#include<stdio.h>
#include<setjmp.h>

jmp_buf env;

void setJmp()
{
	int ret;
	int status = 2;
	
	printf("set jump start\n");
	if((ret = setjmp(env)) == 0)
	{
		printf("direct call setjmp\n");
	}
	else
	{
		printf("return from longjmp: %d\n", ret);
		printf("status: %d\n", status);
		return ;
	}
	printf("set jmp return\n");
	return ;
}

void longJmp()
{
	printf("long jump start\n");
	longjmp(env, 1);
	printf("long jump return\n");
}

int main(void)
{
	setJmp();
	printf("---------div------------\n");
	longJmp();
	
	getchar();
	return 0;   
}
